// 函数接口：接口interface不单可以描述对象，也可以描述函数，对函数的结构进行约束。

interface ISum {
  (x: number, y: number, z?: number | undefined): number;
}

let func1: ISum = function (x: number, y: number): number {
  return x + y;
};
console.log(func1(100, 200));

let func2: ISum = function (
  x: number,
  y: number,
  z?: number | undefined
): number {
  if (z) return x + y + z;
  else return x + y;
};
console.log(func2(100, 200));

// 注意：对于函数类型的类型检查来说，函数的参数名不需要与接口里定义的名字相匹配。函数的参数会逐个进行检查，要求对应位置上的参数类型是兼容的。
